/**
 * - 作者: DoooReyn
 * - 日期: 2023.10.29
 */

import type { ConstructorOf } from "./Base";

/** 字典接口 */
export interface DictionaryImpl<T> {
    /** 数量 */
    get size(): number;
    /** 是否包含指定项目 */
    has(key: string): boolean;
    /** 根据键获取指定项目 */
    fetch(key: string): T | undefined;
    /** 根据键和类型获取指定项目 */
    get(key: string, type: ConstructorOf<T>): T | undefined;
    /** 添加项目 */
    add(key: string, value: T): T;
    /** 移除项目 */
    remove(key: string): void;
    /** 遍历所有项目 */
    each(fn: (key: string, value: T) => void): void;
    /** 遍历所有项目，但在找到后会结束遍历 */
    when(fn: (key: string, value: T) => boolean): void;
    /** 清除所有项目 */
    clear(): void;
}